package com.hhd.pdf.component.table;

import lombok.Getter;
import org.dom4j.Element;

import java.util.LinkedList;
import java.util.List;

@Getter
public class TableXmlParser {
    private final Element element;
    private TableVo table = new TableVo();

    public TableXmlParser(Element element) {
        this.element = element;
        parse();
    }

    private void parse() {
        List<Element> elements = element.elements();
        for (Element e : elements) {
            if (e.getName().equals("theader")) {
                parseHeader(e);
            }

            if (e.getName().equals("tbody")) {
                parseBody(e);
            }

            if (e.getName().equals("tfooter")) {
                parseFooter(e);
            }
        }
        table.setElement(element);
    }

    private void parseFooter(Element e) {
        table.setFooter(parseTrs(e, TrVo.TrType.head));
    }

    private void parseBody(Element e) {
        table.setBody(parseTrs(e, TrVo.TrType.body));
    }

    private void parseHeader(Element e) {
        table.setHeader(parseTrs(e, TrVo.TrType.foot));
    }

    private List<TrVo> parseTrs(Element e, TrVo.TrType type) {
        LinkedList<TrVo> trVos = new LinkedList<>();
        List<Element> trs = e.elements();
        for (Element tr : trs) {
            TrVo trVo = new TrVo(tr);
            trVo.setType(type);
            List<Element> tds = tr.elements();
            for (Element td : tds) {
                trVo.addTd(new TdVo(td));
            }
            trVos.add(trVo);
        }
        return trVos;
    }
}
